﻿//#include <assert.h>
//#include <stdbool.h>
//#include <stdbool.h>
//typedef struct TNode DataType;
//typedef struct Node {
//    DataType* val;
//    struct Node* next;
//}Node;
//typedef struct Queue {
//    Node* head;
//    Node* tail;
//}Queue;
//void QueueInit(Queue* Q) {
//    Q->head = Q->tail = 0;
//}
//void QueuePush(Queue* Q, DataType* x) {
//    Node* node = (Node*)malloc(sizeof(Node));
//    if (!node) {
//        return;
//    }
//    node->val = x;
//    node->next = 0;
//    if (!Q->head) {
//        Q->head = Q->tail = node;
//    }
//    else {
//        Q->tail->next = node;
//        Q->tail = node;
//    }
//}
//void QueuePop(Queue* Q) {
//    if (!Q->head) {
//        return;
//    }
//    Node* node = Q->head->next;
//    free(Q->head);
//    Q->head = node;
//}
//bool QueueEmpty(Queue* Q) {
//    return Q->head == NULL;
//}
//void QueueDestroy(Queue* Q) {
//    if (!Q->head) {
//        return;
//    }
//    Node* node = Q->head->next;
//    while (Q->head != Q->tail) {
//        free(Q->head);
//        Q->head = node;
//        node = node->next;
//    }
//    free(Q->head);
//    free(Q);
//}
//void InorderTraversal(BinTree BT) {//中
//    if (!BT) {
//        return 0;
//    }
//    InorderTraversal(BT->Left);
//    fprintf(stdout, " %c", BT->Data);
//    InorderTraversal(BT->Right);
//}
//void PreorderTraversal(BinTree BT) {//前
//    if (!BT) {
//        return 0;
//    }
//    fprintf(stdout, " %c", BT->Data);
//    PreorderTraversal(BT->Left);
//    PreorderTraversal(BT->Right);
//}
//void PostorderTraversal(BinTree BT) {//后
//    if (!BT) {
//        return 0;
//    }
//    PostorderTraversal(BT->Left);
//    PostorderTraversal(BT->Right);
//    fprintf(stdout, " %c", BT->Data);
//}
//void LevelorderTraversal(BinTree root) {
//    if (!root) {
//        return;
//    }
//    Queue* Q = (Queue*)malloc(sizeof(Queue));
//    QueueInit(Q);
//    QueuePush(Q, root);
//    while (!QueueEmpty(Q)) {
//        fprintf(stdout, " %c", Q->head->val->Data);
//        if (Q->head->val->Left) {
//            QueuePush(Q, Q->head->val->Left);
//        }
//        if (Q->head->val->Right) {
//            QueuePush(Q, Q->head->val->Right);
//        }
//        QueuePop(Q);
//    }
//}